package com.byx.chatclient.contract.user;

import com.byx.chatclient.entity.Result;
import com.byx.chatclient.view.IBaseView;

/**
 * RegisterTaskContract
 *
 * @author Superb
 * @date 2021/3/23 11:12
 */
public interface RegisterTaskContract {
    /**
     * Model层
     */
    interface Model{

        void checkNumber(String number, SimpleCallBack simpleCallBack);

        /**
         * 检验参数是否合法
         * @param number
         * @param code
         * @param password
         * @param simpleCallBack
         * @return
         */
        void checkParam(String number, String code, String password, SimpleCallBack simpleCallBack);

        /**
         * 获取验证码
         * @param number
         * @param callBack
         */
        void getVerificationCode(String number, SimpleCallBack callBack);

        /**
         * 参数检验和发送验证码的回调接口
         */
        interface SimpleCallBack {
            /**
             * 格式符合
             */
            void onSuccess();

            /**
             * 格式不符合
             * @param errMsg 错误信息
             */
            void onError(String errMsg);
        }

        /**
         * 注册逻辑
         * @param number
         * @param verificationCode
         * @param password
         * @param registerWay
         * @param callback 回调
         */
        void register(String number, String verificationCode, String password, int registerWay, RegisterCallBack<Result> callback);

        /**
         * 注册回调接口
         * @param <T> 回调参数类型
         */
        interface RegisterCallBack<T>{
            /**
             * 注册成功
             * @param data 返回的数据
             */
            void onSuccess(T data);

            /**
             * 注册失败
             * @param data 返回数据
             */
            void onFailure(T data);

            /**
             * 账号已经存在
             */
            void onAccountExists();
        }
    }

    /**
     * view层
     */
    interface View extends IBaseView {
        /**
         * 获取登录账号
         * @return 账号
         */
        String getAccount();

        /**
         * 获取手机号或邮箱
         * @return 手机号或邮箱
         */
        String getNumber();

        /**
         * 获取验证码
         * @return 验证码
         */
        String getVerificationCode();

        /**
         * 获取密码
         * @return 密码
         */
        String getPassword();

        /**
         * 注册错误时view层显示错误信息
         * @param errorMsg
         * @param code
         */
        void onError(String errorMsg,int code);

        /**
         * 注册错误时view层显示错误信息
         * @param errorMsg
         */
        void onError(String errorMsg);

        /**
         * 注册成功时调用view层方法
         */
        void onSuccess();

        /**
         * 发送验证码成功
         */
        void sendVerificationCodeSuccess();
    }

    interface Presenter {
        /**
         * 获取验证码
         */
        void getVerificationCode();
        /**
         * 登录
         */
        void register();
    }
}
